package com.quick.develop.flowable.service.definition;

import com.quick.develop.framework.common.page.PageResult;
import com.quick.develop.flowable.domain.model.*;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.repository.Model;

import javax.validation.Valid;

/**
 * @author junyuan.liu
 * @description: Flowable流程模型接口
 * @date: 2022/4/21 11:12
 */

public interface IBpmModelService {

    /**
     * @param id 编号
     * @return
     * @description 获得流程模型
     * @author junyuan.liu
     * @date 2022/4/24 13:37
     */
    BpmModelRespVO getModel(String id);

    /**
     * @param key
     * @return
     * @description 获取流程模型 通过key
     * @author junyuan.liu
     * @date 2022/4/24 9:53
     */
    Model getModelByKey(String key);

    /**
     * @param pageVO
     * @return java.util.List<com.quick.develop.flowable.framework.vo.model.BpmModelPageItemRespVO>
     * @description
     * @author junyuan.liu
     * @date 2022/4/21 19:26
     */
    PageResult<BpmModelPageItemRespVO> getModelPage(BpmModelPageReqVO pageVO);

    /**
     * @param modelVO 创建信息
     * @param bpmnXml BPMN XML
     * @return java.lang.String
     * @description 创建流程模型
     * @author junyuan.liu
     * @date 2022/4/21 13:21
     */
    String createModel(@Valid BpmModelCreateReqVO modelVO, String bpmnXml);

    /**
     * @param updateReqVO 更新信息
     * @description 修改流程模型
     * @author junyuan.liu
     * @date 2022/4/24 15:45
     */
    void updateModel(@Valid BpmModelUpdateReqVO updateReqVO);

    /***
     * @description 删除模型
     * @param id 编号
     * @author junyuan.liu
     * @date 2022/4/24 15:56
     */
    void deleteModel(String id);

    /**
     * @param model
     * @param bpmnXml
     * @description 保存流程xml
     * @author junyuan.liu
     * @date 2022/4/24 10:00
     */
    void saveModelBpmnXml(Model model, String bpmnXml);

    /**
     * @param id 编号
     * @description 将流程模型，部署成一个流程定义
     * @author junyuan.liu
     * @date 2022/4/24 9:42
     */
    void deployModel(String id);

    /**
     * @param reqVO 请求体
     * @description 修改模型的状态，实际更新的部署的流程定义的状态，运行的流程也会挂起
     * @author junyuan.liu
     * @date 2022/7/5 15:14
     */
    void updateModelState(BpmModelUpdateStateReqVO reqVO);

    /**
     * @param id 流程模型编号
     * @return org.flowable.bpmn.model.BpmnModel
     * @description 获得流程模型编号对应的 BPMN Model
     * @author junyuan.liu
     * @date 2022/4/22 16:16
     */
    BpmnModel getBpmnModelByModelId(String id);

    /**
     * @param id 流程模型ID
     * @return java.lang.String
     * @description 获得流程模型对应的 BPMN XML
     * @author junyuan.liu
     * @date 2022/6/27 13:37
     */
    String getBpmnXmlByModelId(String id);


}
